const {
	src, // 源文件
	dest, // 输出方法
	series, // 按顺序执行多个任务
	parallel, // 同时执行多个任务
	watch //监听函数
	} = require('gulp')
const autoPreFixer = require("gulp-autoprefixer") // 给css添加前缀
const minifyCss = require("gulp-minify-css"); // 压缩css
const sass = require("gulp-sass") ; // sass转css
const babel = require("gulp-babel") // es6转换成es5
const uglify = require("gulp-uglify") // 压缩js(这个只能压es5)
const htmlmin = require("gulp-htmlmin") // 压缩html
const browserSync = require("browser-sync").create()
const { broswerslist } = require("./package.json") // 去配置文件读相应的字段

console.info(broswerslist)
console.info(htmlmin)

const options = {
	collapseWhitespace:true,
	collapseBooleanAttributes:true,
	removeComments:true,
	removeEmptyAttributes:true,
	removeScriptTypeAttributes:true,
	removeStyleLinkTypeAttributes:true,
	minifyJS:true,
	minifyCSS:true
};
const assets = "media"

/***********处理sass****************/
function sassTransform(cb) { // 转scss成为css
	src('./src/scss/**/*.scss')
	.pipe(sass())
	.pipe(autoPreFixer({
		overrideBrowserslist: broswerslist
	}))
	.pipe(dest('./src/css/'))
	.pipe(minifyCss())
	.pipe(dest('./dist/css/'))
	cb()
}
// 只是把css压缩并放入dist文件夹
function css2Dist(cb) {
	src('./src/css/**/*.css')
	.pipe(minifyCss())
	.pipe(dest('./dist/css/'))
	cb()
}

/***********处理js*********************/
function js(cb) {
	src('./src/js/**/*.js')
	.pipe(babel())
	.pipe(uglify())
	.pipe(dest('./dist/js/'))
	cb()
}

/***********处理html*********************/

function html(cb) {
	src('./src/**/*.html')
	.pipe(htmlmin(options))
	.pipe(dest('./dist/'))
	cb()
}
/***********静态资源直接复制***************/
function sourceCopy(cb) {
	src(`./src/${assets}/**/*.*`)
	.pipe(dest(`./dist/${assets}/`))
	cb()
}


function dev() {
	browserSync.init({
		port:3003,
		server: {
			baseDir: "./src"
		}       
	});
	watch('./src/scss/**/*.scss', {delay: 500}, sassTransform).on("change", browserSync.reload)
	watch('./src/**/*.html', {delay: 500}, html).on("change", browserSync.reload)
	watch(`./src/${assets}/**/*.*`, {delay: 500}, sourceCopy).on("change", browserSync.reload)
	watch('./src/js/**/*.js', {delay: 500}, js).on("change", browserSync.reload)
}

// 这里暴露的指令就是以前task写的东西
exports.dev = dev
exports.default = parallel(html, sassTransform, js, sourceCopy)